package com.boarsoft.boar.config.service;

import com.boarsoft.bean.ReplyInfo;

public interface CommonLockService {
   /**
    * 锁查询
    * @param appId 应用ID
    * @param url 资源url
    * @param address 加锁的客户端地址
    * @param type 锁类型 R-读 W-写 S独占锁
    * @param orderBy 排序字段
    * @param pageNo 页数
    * @param pageSize 每页记录数
    * @return 查询结果
    */
   ReplyInfo<Object> list(String appId, String url, String address, String type, String orderBy, int pageNo, int pageSize);
   /**
    * 加锁
    * @param url 资源url
    * @param appId 应用ID
    * @param type 锁类型 R-读 W-写 S独占锁
    * @param address 加锁的客户端地址
    * @return 加锁结果
    */
   ReplyInfo<Object> lock(String uid, String url, String appId, String type, String address);

   /**
    * 加锁
    * @param url 资源url
    * @param appId 应用ID
    * @param type 锁类型 R-读 W-写 S独占锁
    * @param address 加锁的客户端地址
    * @param timeout 超时时间
    * @return 加锁结果
    */
   ReplyInfo<Object> lock(String uid, String url, String appId, String type, String address,String timeout);

   /**
    * 解锁
    * @param url 资源url
    * @param appId 应用Id
    * @param address 加锁的客户端地址
    * @param type 锁类型
    * @return 锁监息
    */
   ReplyInfo<Object> unLock(String uid, String url, String appId, String type, String address);

   /**
    * 锁降级
    * @param url 资源url
    * @param appId 应用Id
    * @param address 加锁的客户端地址
    * @param oriType 原锁类型
    * @param newType 新锁类型
    * @return 锁监息
    */
   ReplyInfo<Object> reduce(String uid, String url, String appId, String address, String oriType,String newType);

   /**
    * 检查锁是否可用
    * @param url 资源url
    * @param appId 应用Id
    * @param address 加锁的客户端地址
    * @param type 锁类型
    * @return 锁监息
    */
   ReplyInfo<Object> check(String uid, String url, String appId, String type, String address);
}
